//>>built
define("dojox/gfx/svg_attach", ["dojo/_base/kernel", "dojo/_base/lang", "dojo/_base/array", "dojo/_base/Color", "./_base", "./svg", "./matrix"], function (_1, _2, _3, _4, g, _5, _6) {
    _1.experimental("dojox.gfx.svg_attach");
    _5.attachNode = function (_7) {
        if (!_7) {
            return null;
        }
        var s = null;
        switch (_7.tagName.toLowerCase()) {
            case _5.Rect.nodeType:
                s = new _5.Rect(_7);
                _8(s);
                break;
            case _5.Ellipse.nodeType:
                s = new _5.Ellipse(_7);
                _9(s, g.defaultEllipse);
                break;
            case _5.Polyline.nodeType:
                s = new _5.Polyline(_7);
                _9(s, g.defaultPolyline);
                break;
            case _5.Path.nodeType:
                s = new _5.Path(_7);
                _9(s, g.defaultPath);
                break;
            case _5.Circle.nodeType:
                s = new _5.Circle(_7);
                _9(s, g.defaultCircle);
                break;
            case _5.Line.nodeType:
                s = new _5.Line(_7);
                _9(s, g.defaultLine);
                break;
            case _5.Image.nodeType:
                s = new _5.Image(_7);
                _9(s, g.defaultImage);
                break;
            case _5.Text.nodeType:
                var t = _7.getElementsByTagName("textPath");
                if (t && t.length) {
                    s = new _5.TextPath(_7);
                    _9(s, g.defaultPath);
                    _a(s);
                } else {
                    s = new _5.Text(_7);
                    _b(s);
                }
                _c(s);
                break;
            default:
                return null;
        }
        if (!(s instanceof _5.Image)) {
            _d(s);
            _e(s);
        }
        _f(s);
        return s;
    };
    _5.attachSurface = function (_10) {
        var s = new _5.Surface();
        s.rawNode = _10;
        var _11 = _10.getElementsByTagName("defs");
        if (_11.length == 0) {
            return null;
        }
        s.defNode = _11[0];
        return s;
    };
    function _d(_12) {
        var _13 = _12.rawNode.getAttribute("fill");
        if (_13 == "none") {
            _12.fillStyle = null;
            return;
        }
        var _14 = null, _15 = _5.getRef(_13);
        if (_15) {
            switch (_15.tagName.toLowerCase()) {
                case "lineargradient":
                    _14 = _16(g.defaultLinearGradient, _15);
                    _3.forEach(["x1", "y1", "x2", "y2"], function (x) {
                        _14[x] = _15.getAttribute(x);
                    });
                    break;
                case "radialgradient":
                    _14 = _16(g.defaultRadialGradient, _15);
                    _3.forEach(["cx", "cy", "r"], function (x) {
                        _14[x] = _15.getAttribute(x);
                    });
                    _14.cx = _15.getAttribute("cx");
                    _14.cy = _15.getAttribute("cy");
                    _14.r = _15.getAttribute("r");
                    break;
                case "pattern":
                    _14 = _2.clone(g.defaultPattern);
                    _3.forEach(["x", "y", "width", "height"], function (x) {
                        _14[x] = _15.getAttribute(x);
                    });
                    _14.src = _15.firstChild.getAttributeNS(_5.xmlns.xlink, "href");
                    break;
            }
        } else {
            _14 = new _4(_13);
            var _17 = _12.rawNode.getAttribute("fill-opacity");
            if (_17 != null) {
                _14.a = _17;
            }
        }
        _12.fillStyle = _14;
    };
    function _16(_18, _19) {
        var _1a = _2.clone(_18);
        _1a.colors = [];
        for (var i = 0; i < _19.childNodes.length; ++i) {
            _1a.colors.push({offset: _19.childNodes[i].getAttribute("offset"), color: new _4(_19.childNodes[i].getAttribute("stop-color"))});
        }
        return _1a;
    };
    function _e(_1b) {
        var _1c = _1b.rawNode, _1d = _1c.getAttribute("stroke");
        if (_1d == null || _1d == "none") {
            _1b.strokeStyle = null;
            return;
        }
        var _1e = _1b.strokeStyle = _2.clone(g.defaultStroke);
        var _1f = new _4(_1d);
        if (_1f) {
            _1e.color = _1f;
            _1e.color.a = _1c.getAttribute("stroke-opacity");
            _1e.width = _1c.getAttribute("stroke-width");
            _1e.cap = _1c.getAttribute("stroke-linecap");
            _1e.join = _1c.getAttribute("stroke-linejoin");
            if (_1e.join == "miter") {
                _1e.join = _1c.getAttribute("stroke-miterlimit");
            }
            _1e.style = _1c.getAttribute("dojoGfxStrokeStyle");
        }
    };
    function _f(_20) {
        var _21 = _20.rawNode.getAttribute("transform");
        if (_21.match(/^matrix\(.+\)$/)) {
            var t = _21.slice(7, -1).split(",");
            _20.matrix = _6.normalize({xx: parseFloat(t[0]), xy: parseFloat(t[2]), yx: parseFloat(t[1]), yy: parseFloat(t[3]), dx: parseFloat(t[4]), dy: parseFloat(t[5])});
        } else {
            _20.matrix = null;
        }
    };
    function _c(_22) {
        var _23 = _22.fontStyle = _2.clone(g.defaultFont), r = _22.rawNode;
        _23.style = r.getAttribute("font-style");
        _23.variant = r.getAttribute("font-variant");
        _23.weight = r.getAttribute("font-weight");
        _23.size = r.getAttribute("font-size");
        _23.family = r.getAttribute("font-family");
    };
    function _9(_24, def) {
        var _25 = _24.shape = _2.clone(def), r = _24.rawNode;
        for (var i in _25) {
            _25[i] = r.getAttribute(i);
        }
    };
    function _8(_26) {
        _9(_26, g.defaultRect);
        _26.shape.r = Math.min(_26.rawNode.getAttribute("rx"), _26.rawNode.getAttribute("ry"));
    };
    function _b(_27) {
        var _28 = _27.shape = _2.clone(g.defaultText), r = _27.rawNode;
        _28.x = r.getAttribute("x");
        _28.y = r.getAttribute("y");
        _28.align = r.getAttribute("text-anchor");
        _28.decoration = r.getAttribute("text-decoration");
        _28.rotated = parseFloat(r.getAttribute("rotate")) != 0;
        _28.kerning = r.getAttribute("kerning") == "auto";
        _28.text = r.firstChild.nodeValue;
    };
    function _a(_29) {
        var _2a = _29.shape = _2.clone(g.defaultTextPath), r = _29.rawNode;
        _2a.align = r.getAttribute("text-anchor");
        _2a.decoration = r.getAttribute("text-decoration");
        _2a.rotated = parseFloat(r.getAttribute("rotate")) != 0;
        _2a.kerning = r.getAttribute("kerning") == "auto";
        _2a.text = r.firstChild.nodeValue;
    };
    return _5;
});
